package com.myelasticsearch.zxisl

import java.io.File
import java.util

import com.myelasticsearch.utils.{ESUtils, JsonUtils}
import org.apache.commons.io.FileUtils
import org.elasticsearch.client.transport.TransportClient

import scala.io.Source

/**
  * Created by ade on 2016/10/12.
  * 第一个参数是 数据目录
  *  第二个参数是 索引名称
  *  第三个参数是 type名称
  */
object Insert {

  def main(args: Array[String]) {
    val inter = getFileName(new File(args(0)))
//    val fileNames = new File(args(0)).list()//获取所有的文档名称数组列表
    val time = System.currentTimeMillis()
    println("beginTime:  " + time)
    //打开客户端一次，不像以前打开和关闭100次
    val client: TransportClient = ESUtils.getTransportClient
    //执行一次该方法
    InsertT.create_index_type_mapping(client,args(1),args(2));
    var list = new util.ArrayList[util.HashMap[String,AnyRef]]()
    for(fileName <- inter){
      println("fileName is " + fileName)
      val startTime = System.currentTimeMillis()
      for (line <- Source.fromFile(fileName).getLines()){
        list.add(JsonUtils.toMap(JsonUtils.parseJson(line)).asInstanceOf[util.HashMap[String,AnyRef]])
      }
      //执行多次该方法
      InsertT.execute(client,args(1), args(2), list);
      //执行完后 把 list进行初始化
      list = new util.ArrayList[util.HashMap[String,AnyRef]]
      val endTime = System.currentTimeMillis()
      System.out.println(fileName.toString +" end " +  (endTime-startTime))
    }
    client.close()
    println("endTime: " + (System.currentTimeMillis()-time))
  }


  def getFileName(dir: File): Iterator[File] = {
    val d = dir.listFiles.filter(_.isDirectory)
    val f = dir.listFiles.toIterator
    f ++ d.toIterator.flatMap(getFileName _)
  }
}
